﻿using System.Collections.Generic;
using System.Linq;

namespace UniSender
{
    using Expando = Dictionary<string, object>;

    partial class Client
    {
        /// <summary>
        /// Получить список пользовательских полей
        /// </summary>
        /// <returns>Список полей</returns>
        public virtual Field[] GetFields()
        {
            return Apply<Native.Field[]>("getFields")
                .IfNotNull(result => result.Select(r => new Field(r)).ToArray());
        }

        /// <summary>
        /// Cоздать новое поле
        /// </summary>
        /// <param name="args">Параметры поля</param>
        /// <returns>Созданное поле</returns>
        public virtual Field CreateField(Field args)
        {
            return Apply<Native.Field>("createField", args.Serialize())
                .IfNotNull(result => { args.Id = result.id; return args; });
        }

        /// <summary>
        /// Изменить параметры поля
        /// </summary>
        /// <param name="args">Параметры поля</param>
        public virtual void UpdateField(Field args)
        {
            Apply("updateField", args.Serialize());
        }

        /// <summary>
        /// Удалить поле
        /// </summary>
        /// <param name="id">Код поля</param>
        public virtual void DeleteField(long id)
        {
            Apply("deleteField", new Expando() { { "id", id } });
        }


        /// <summary>
        /// Получить список пользовательских меток
        /// </summary>
        /// <returns>Список меток</returns>
        public virtual Tag[] GetTags()
        {
            return Apply<Native.Tag[]>("getTags")
                .IfNotNull(result => result.Select(t => new Tag(t)).ToArray());
        }

        /// <summary>
        /// Удалить метку
        /// </summary>
        /// <param name="id">Код одной метоки</param>
        public virtual void DeleteTag(long id)
        {
            Apply("deleteTag", new Expando() { { "id", id } });
        }
    }
}
